home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / pdev.h < prev    next >
C/C++ Source or Header  |  1990-02-19  |  3KB  |  87 lines

  1. /*
  2.  * pdev.h --
  3.  *
  4.  * Definitions for pseudo-device library routines.  The man page
  5.  * for pdev (or Pdev_Open) has necessary documentation.
  6.  *
  7.  * Copyright 1988 Regents of the University of California
  8.  * Permission to use, copy, modify, and distribute this
  9.  * software and its documentation for any purpose and without
  10.  * fee is hereby granted, provided that the above copyright
  11.  * notice appear in all copies.  The University of California
  12.  * makes no representations about the suitability of this
  13.  * software for any purpose.  It is provided "as is" without
  14.  * express or implied warranty.
  15.  *
  16.  * $Header: /sprite/src/lib/include/RCS/pdev.h,v 1.8 90/02/19 14:44:15 douglis Exp $ SPRITE (Berkeley)
  17.  */
  18.  
  19. #ifndef _PDEVLIB
  20. #define _PDEVLIB
  21.  
  22. #include <fs.h>
  23. #include <dev/pdev.h>
  24.  
  25. /*
  26.  * Boolean that can be toggled by applications command line arguments.
  27.  * This causes print statements that trace pdev/pfs operations.
  28.  */
  29. extern int pdev_Trace;
  30.  
  31. /*
  32.  * The library keeps a set of callback procedures, one for each pdev request
  33.  * that arrives on a request stream.  Fields can be set to NULL to get
  34.  * a default handler for the operation.  See the man page for the
  35.  * calling sequence of each call-back procedure.
  36.  */
  37.  
  38. typedef struct {
  39.     int (*open)();        /* PDEV_OPEN */
  40.     int (*read)();        /* PDEV_READ */
  41.     int (*write)();        /* PDEV_WRITE and PDEV_WRITE_ASYNC */
  42.     int (*ioctl)();        /* PDEV_IOCTL */
  43.     int (*close)();        /* PDEV_CLOSE */
  44.     /*
  45.      * The following are only used for pseudo-device connnections
  46.      * into a pseudo-file-system.  For regular pseudo-devices the
  47.      * kernel completely handles attributes.
  48.      */
  49.     int (*getAttr)();        /* PDEV_GET_ATTR */
  50.     int (*setAttr)();        /* PDEV_SET_ATTR */
  51. } Pdev_CallBacks;
  52.  
  53. /*
  54.  * A Pdev_Stream is is passed to the PDEV_OPEN call-back handler.
  55.  * This provides a handle on the particular stream to the pseudo-device.
  56.  * The handle for the stream is passed to each call-back procedure.
  57.  */
  58. typedef struct Pdev_Stream {
  59.     unsigned int magic;        /* Either PDEV_MAGIC or PDEV_STREAM_MAGIC */
  60.     int streamID;        /* Sprite stream identifier, either of
  61.                  * control or server stream depending
  62.                  * on context of the token. */
  63.     ClientData clientData;    /* For use by the client of the Pdev package */
  64. } Pdev_Stream;
  65.  
  66. typedef char *Pdev_Token;    /* Opaque token for the pseudo-device */
  67.  
  68. #define PDEV_MAGIC        0xabcd1234
  69. #define PDEV_STREAM_MAGIC    0xa1b2c3d4
  70.  
  71. #ifndef max
  72. #define max(a, b) \
  73.     ( ((a) > (b)) ? (a) : (b) )
  74. #endif
  75.  
  76. extern char pdev_ErrorMsg[];
  77.  
  78. extern    Pdev_Token        Pdev_Open();
  79. extern    void            Pdev_Close();
  80. extern    int               (*Pdev_SetHandler())();
  81. extern    int            Pdev_EnumStreams();
  82. extern    int            Pdev_GetStreamID();
  83.  
  84. extern    Pdev_Stream           *PdevSetup();
  85.  
  86. #endif /* _PDEVLIB */
  87.